home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / usr / bin / grog < prev    next >
Text File  |  2005-10-13  |  2KB  |  113 lines

  1. #!/bin/sh
  2. # grog -- guess options for groff command
  3. # Like doctype in Kernighan & Pike, Unix Programming Environment, pp 306-8.
  4.  
  5. soelim=soelim
  6.  
  7. opts=
  8. sp="([     ]|$)"
  9.  
  10. for arg
  11. do
  12.     case "$arg" in
  13.     --)
  14.         shift; break;;
  15.     -)
  16.         break;;
  17.     -C)
  18.         sp=; opts="$opts -C"; shift; break;;
  19.     -v | --version)
  20.         echo "GNU grog (groff) version 1.19.1"
  21.         exit 0;;
  22.     --help)
  23.         echo "usage: grog [ option ...] [files...]"
  24.         exit 0;;
  25.     -*)
  26.         opts="$opts $arg"; shift;;
  27.     *)
  28.         break;;
  29.     esac
  30. done
  31.  
  32. egrep -h "^\.(\[|\])|((P|PS|[PLI]P|[pnil]p|sh|Dd|Tp|Dp|De|Cx|Cl|Oo|.* Oo|Oc|.* Oc|TS|EQ|TH|SH|so|\[|R1|GS|G1|PH|SA)$sp)" $* \
  33. | sed -e '/^\.so/s/^.*$/.SO_START\
  34. &\
  35. .SO_END/' \
  36. | $soelim \
  37. | egrep '^\.(P|PS|[PLI]P|[pnil]p|sh|Dd|Tp|Dp|De|Cx|Cl|Oo|.* Oo|Oc|.* Oc|TS|EQ|TH|SH|\[|\]|R1|GS|G1|PH|SA|SO_START|SO_END)' \
  38. | awk '
  39. /^\.SO_START$/ { so = 1 }
  40. /^\.SO_END$/ { so = 0 }
  41. /^\.TS/ { tbl++; if (so > 0) soelim++ }
  42. /^\.PS([ 0-9.<].*)?$/ { pic++; if (so > 0) soelim++ }
  43. /^\.EQ/ { eqn++; if (so > 0) soelim++ }
  44. /^\.R1/ { refer++; if (so > 0) soelim++ }
  45. /^\.\[/ {refer_start++; if (so > 0) soelim++ }
  46. /^\.\]/ {refer_end++; if (so > 0) soelim++ }
  47. /^\.GS/ { grn++; if (so > 0) soelim++ }
  48. /^\.G1/ { grap++; pic++; if (so > 0) soelim++ }
  49. /^\.TH/ { TH++ }
  50. /^\.[PLI]P/ { PP++ }
  51. /^\.P$/ { P++ }
  52. /^\.SH/ { SH++ }
  53. /^\.(PH|SA)/ { mm++ }
  54. /^\.([pnil]p|sh)/ { me++ }
  55. /^\.Dd/ { mdoc++ }
  56. /^\.(Tp|Dp|De|Cx|Cl)/ { mdoc_old++ }
  57. /^\.(O[oc]|.* O[oc]( |$))/ {
  58.     sub(/\\\".*/, "")
  59.     gsub(/\"[^\"]*\"/, "")
  60.     sub(/\".*/, "")
  61.     sub(/^\.Oo/, " Oo ")
  62.     sub(/^\.Oc/, " Oc ")
  63.     sub(/ Oo$/, " Oo ")
  64.     sub(/ Oc$/, " Oc ")
  65.     while (/ Oo /) {
  66.         sub(/ Oo /, " ")
  67.         Oo++
  68.     }
  69.     while (/ Oc /) {
  70.         sub(/ Oc /, " ")
  71.         Oo--
  72.     }
  73. }
  74. /^\.(PRINTSTYLE|START)/ { mom++ }
  75.  
  76. END {
  77.     if (files ~ /^-/)
  78.         files = "-- " files
  79.     printf "groff"
  80.     refer = refer || (refer_start && refer_end)
  81.     if (pic > 0 || tbl > 0 || grn > 0 || grap > 0 || eqn > 0 || refer > 0) {
  82.         printf " -"
  83.         if (soelim > 0) printf "s"
  84.         if (refer > 0) printf "R"
  85.         if (grn > 0) printf "g"
  86.         if (grap > 0) printf "G"
  87.         if (pic > 0) printf "p"
  88.         if (tbl > 0) printf "t"
  89.         if (eqn > 0) printf "e"
  90.     }
  91.     if (me > 0)
  92.         printf " -me"
  93.     else if (SH > 0 && TH > 0)
  94.         printf " -man"
  95.     else if (mom > 0)
  96.         printf " -mom"
  97.     else if (PP > 0)
  98.         printf " -ms"
  99.     else if (P > 0 || mm > 0)
  100.         printf " -mm"
  101.     else if (mdoc > 0) {
  102.         if (mdoc_old > 0 || Oo > 0)
  103.             printf " -mdoc-old"
  104.         else
  105.             printf " -mdoc"
  106.     }
  107.     if (opts != "")
  108.         printf "%s", opts
  109.     if (files != "")
  110.         printf " %s", files
  111.     print ""
  112. }' "opts=$opts" "files=$*" -
  113.